// 菜品相关的路由表

// 创建路由表（空表）
// let express = require('express')
// let router = express.Router()
let router = require('express').Router()

// 导入数据模型
let foodModel = require('../db/models/foodModel')

/**
 * @api {post} /food/add 添加菜品
 * @apiGroup food
 *
 * @apiParam {String} name 菜品名称
 * @apiParam {String} price 菜品价格
 * @apiParam {String} desc 菜品描述
 * @apiParam {String} type 菜品分类
 * @apiParam {String} imgurl 菜品图片
 *
 * @apiSuccessExample 返回数据示例:
 * {
 *     "code": 1,
 *     "msg": "添加成功"
 * }
 */
router.post('/add',(req,res)=>{
    // 获取请求参数并解构赋值
    let {name,desc,price,type,imgurl} = req.body
    // 先查询数据库是否有name这个菜品
    foodModel.find({name})
    .then((arr)=>{
        if (arr.length === 0) {
            // 数据库中没有这个菜名，可以添加
            return foodModel.insertMany({name,desc,price,type,imgurl})
        }
        else {
            // 数据库中已有这个菜名
            res.send({code:-1,msg:'该菜品已存在！'})
        }
    })
    .then(()=>{
        res.send({code:1,msg:'添加成功！'})
    })
    .catch((err)=>{
        res.send({code:0,msg:err})
    })
})

/**
 * @api {post} /food/del 删除菜品
 * @apiGroup food
 *
 * @apiParam {String} name 菜品名称
 *
 * @apiSuccessExample 返回数据示例:
 * {
 *     "code": 1,
 *     "msg": "添加成功"
 * }
 */
router.post('/del',(req,res)=>{
    // 获取前端传过来的参数
    let {name} = req.body
    // 删除数据
    foodModel.deleteOne({name})
    .then(()=>{
        res.send({code:1,msg:'删除成功！'})
    })
    .catch(()=>{
        res.send({code:0,msg:'删除失败！'})
    })
})

/**
 * @api {post} /food/update 修改菜品
 * @apiGroup food
 *
 * @apiParam {String} originalname 菜品原始名称
 * @apiParam {String} name 菜品名称
 * @apiParam {String} price 菜品价格
 * @apiParam {String} desc 菜品描述
 * @apiParam {String} type 菜品分类
 * @apiParam {String} imgurl 菜品图片
 *
 * @apiSuccessExample 返回数据示例:
 * {
 *     "code": 1,
 *     "msg": "修改成功"
 * }
 */
router.post('/update',(req,res)=>{
    // 获取前端传过来的参数
    let {originalname,name,desc,price,type,imgurl} = req.body
    console.log( originalname )
    // 修改数据
    foodModel.updateOne({name:originalname},{$set:{name,desc,price,type,imgurl}})
    .then(()=>{
        res.send({code:1,msg:'修改成功'})
    })
    .catch(()=>{
        res.send({code:0,msg:'修改失败'})
    })
})

/**
 * @api {post} /food/getpage 分页查询
 * @apiGroup food
 *
 * @apiParam {String} page 页码
 * @apiParam {String} size 每页条数
 *
 * @apiSuccessExample 返回数据示例:
 * {
 *     "code": 1,
 *     "msg": "查询成功",
 *     "data": [分页数据],
 *     "pages": "总页数",
 *     "count": "数据总条数"
 * }
 */
router.post('/getpage',(req,res)=>{
    // 获取前端传过来的参数
    let {page,size} = req.body
    page = page || 1 // 页码，默认为第1页
    size = size || 4 // 每页条数，默认为4条
    let pages = 0 // 记录数据总页数
    let count = 0 // 记录数据总条数
    // 查询所有数据
    foodModel.find()
    .then((arr)=>{
        count = arr.length
        pages = Math.ceil(count/size)

        // foodModel.find()查询所有数据
        // limit(num)限制查询num条数据
        // skip(num)跳过num条数据开始查询
        // skip(0)// 查询第1页，跳过0条，从第1条开始查询
        // skip(4)// 查询第2页，跳过4条，从第5条开始查询
        // skip(8)// 查询第3页，跳过8条，从第9条开始查询
        // skip((page-1)*size)
        return foodModel.find().limit(Number(size)).skip((page-1)*size)
    })
    .then((arr)=>{
        res.send({code:1,msg:'查询成功！',data:arr,pages,count})
    })
    .catch(()=>{
        res.send({code:0,msg:'查询失败，请重试！'})
    })
})

/**
 * @api {post} /food/search 关键字查询
 * @apiGroup food
 *
 * @apiParam {String} kw 关键字
 *
 * @apiSuccessExample 返回数据示例:
 * {
 *     "code": 1,
 *     "msg": "查询成功",
 *     "data": [查询数据]
 * }
 */
router.post('/search',(req,res)=>{
    // 获取前端传过来的关键字参数
    let {kw} = req.body
    // 定义匹配kw关键字的正则
    // let reg = /kw/ // 规则匹配'kw'字符串
    let reg = new RegExp(kw) // 规则匹配 kw 变量的值
    // 根据关键字查询数据
    // foodModel.find({name:{$regex:reg}})// 只查询name字段
    foodModel.find({$or:[{name:{$regex:reg}},{desc:{$regex:reg}},{price:{$regex:reg}},{type:{$regex:reg}}]})
    .then((arr)=>{
        if (arr.length === 0) {
            res.send({code:-1,msg:'暂无数据！',data:[]})
        } else {
            res.send({code:1,msg:'查询成功！',data:arr})
        }
    })
    .catch((err)=>{
        res.send({code:0,msg:'查询失败！'})
    })
})

// 导出路由表
module.exports = router
